<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    ul {
      list-style: none;
    }

    body {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }

    /* 自动播放*/
    .container {
      position: relative;
      width: 533px;
      height: 300px;
    }

    .item {
      position: absolute;
      /* 将图片定位到同一个位置，重叠起来 */

      /* display: none; */
      opacity: 0;
      transition: opacity 1s;
    }

    .active {
      /* display: block; */
      opacity: 1;
    }

    /* 指示器 */
    .circles_con {
      position: absolute;
      left: 50%;
      transform: translateX(-50%);
      bottom: 15px;
    }

    .circle {
      float: left;
      width: 15px;
      height: 15px;
      border-radius: 50%;
      background-color: #fff;
      margin: 0 6px;
      cursor: pointer;
    }

    .on {
      background-color: orange;
    }

    /* 按钮 */
    .next,
    .prev {
      position: absolute;
      top: 50%;
      transform: translate(0, -50%);
      width: 54px;
      height: 79px;
      display: none;
      cursor: pointer;
    }

    .next {
      position: absolute;
      right: 0;
      background: url(../images/next.png);
    }

    .prev {
      background: url(../images/pre.png);
    }
  </style>
</head>

<body>
  <div class="container">
    <!-- 轮播图片 -->
    <div class="item active"><img src="../images/心明眼亮.webp" alt=""></div>
    <div class="item"><img src="../images/疾风已有归途.webp" alt=""></div>
    <div class="item"><img src="../images/真正的大师永远怀着一颗学徒的心.webp" alt=""></div>
    <div class="item"><img src="../images/长枪依在.webp" alt=""></div>

    <!-- 指示器 -->
    <ul class="circles_con">
      <li class="circle on"></li>
      <li class="circle"></li>
      <li class="circle"></li>
      <li class="circle"></li>
    </ul>

    <!-- 按钮 -->
    <div class="next"></div>
    <div class="prev"></div>
  </div>


  <script>
    /* -----自动播放/指示器----- */
    let index = 0;  // 当前应该播放哪张图
    let timerId = null; // 定时器
    // 获取元素
    let lists = document.querySelectorAll(".item");
    let cont = document.querySelector(".container");
    let circles = document.querySelectorAll(".circle");
    let pre = document.querySelector(".prev");
    let next = document.querySelector(".next");

    /*----- 设置图片定时切换 依靠index来选择顺序播放图片 -----*/
    function autoPlay() {  // 封装函数
      timerId = setInterval(function () {
        let oldIndex = index;
        index++;  // 自增，将图片转到下一个
        if (index === 4) {  // 设置边界
          index = 0;  // 返回第一张图片
        }
        let newIndex = index;
        play(oldIndex, newIndex); // 对封装函数的调用
      }, 2000)
      let autorun
    }
    autoPlay();

    /*----- 优化 鼠标移入停止定时器 -----*/
    function mouseSwitch() {  // 封装函数
      cont.addEventListener("mouseenter", function () {
        pre.style.display = "block" // 移入时，按钮显示
        next.style.display = "block"
        clearInterval(timerId);
        timerId = null;

      })
      // 鼠标移出，再次调用定时器函数
      cont.addEventListener("mouseleave", function () {
        pre.style.display = "none"  // 移出时，按钮隐藏
        next.style.display = "none"
        autoPlay(); // 鼠标移出时调用定时器函数，再次进行轮播
      })
    }
    mouseSwitch();

    /* -----按钮翻页----- */
    function btnSwitch() {
      // 上一页
      pre.addEventListener("click", function () {

        let oldIndex = index;
        index--;
        if (index === -1) {  // 设置边界
          index = 3;  // 返回最后一张图片
        }
        let newIndex = index;
        play(oldIndex, newIndex); // 对封装函数的调用
      })

      // 下一页
      next.addEventListener("click", function () {
        let oldIndex = index;
        index++;
        if (index === 4) {  // 设置边界
          index = 0;  // 返回第一张图片
        }
        let newIndex = index;
        play(oldIndex, newIndex); // 对封装函数的调用
      })
    }
    btnSwitch();

    /* -----点击指示器选择图片----- */
    function select() {
      circles.forEach(function (circle, i) {
        circle.addEventListener("click", function () {
          play(index, i)  // i表示当前点击的索引，index代表原来的索引
          // play(oldIndex,newIndex)  对封装函数的调用
          index = i;  // 执行完之后，将现在的索引赋值给index 等待下一次点击
        })
      })
    }
    select();

    /* 提取一个函数，play(原来的索引,现在需要展示的索引)
                    play(oldIndex,newIndex) */
    function play(oldIndex, newIndex) {
      lists[oldIndex].classList.remove("active"); // 实现对原来图片和圆点的样式移除
      circles[oldIndex].classList.remove("on");

      lists[newIndex].classList.add("active");  // 实现对当前图片和圆点的样式增加
      circles[newIndex].classList.add("on");
    }

  </script>
</body>

</html>